Technical Field
The subject matter described herein generally relates to the field of computing devices and includes security measures administered during startup of a computing device. Security measures may include verification of code signature.
Background Information
In secure computing environments, software or firmware in the form of program code or a sequence of instructions may be verified as being the true unaltered code before being executed in a computing device. Software may be digitally signed, and the digital signature may be verified through a verification process to ensure the software is from a trusted source. Hacking techniques are constantly improving. As such, code verification processes may be vulnerable to non-invasive and physical attacks.
Non-invasive attacks generally involve observing or manipulating a device without causing physical harm to the device. Components of a computing device that may be targets of non-invasive attacks include the CPU, memory, and I/O interfaces. Memory elements may include SRAM, flash, and ROM. Elements processed by a CPU may include instructions, data, and processing results. Security may be compromised by forcing a debug mode, gaining access to additional regions in the device memory, or discovering values of encryption keys.
Fault injection is a form of non-invasive attack. Fault injection generally involves generating malfunctions in the system. A form of fault injection referred to as “glitching” generally involves corrupting data, skipping or altering instructions, or altering the clock signal or the power supply as they are used in performance of a secure process. Altering the clock signal may cause faults such as an incorrect instruction fetch. Invoking a power glitch may result in corrupting a data read from memory.
Computing devices are particularly vulnerable to fault injection attack during manufacturing testing in which device ports, memory, and secret data may be made available to perform the testing. For example, sensitive data such as encryption keys, and code such as firmware may be stored in flash memory. Also, a computing device may be vulnerable to attack during payload installation or installation of application software in a computing device. As such, the code verification algorithm used during installation is particularly vulnerable to glitching.
In addition, hardcoded initial conditions used in a code verification algorithm may make the algorithm more vulnerable to fault injection using a rollback scheme.
Further, memory resources in computing devices may be limited during early testing stages.
As recognized by the inventors, there is a need for a security device and process that permits code and/or commands to be executed only by specified devices and prohibits any other installation and/or execution of the code and/or commands. Such a security device and process should be resistant to glitching and other hacking techniques, including during verification procedures.
As recognized by the inventors, there is a need to permit code to execute if and only if the code is unaltered and the execution environment matches a code signer's specifications. The execution environment may comprise a device state including a chip identifier and states of fuses used to indicate a version number to prevent a rollback attack.